package cn.haoma.base.socket.inf;

import android.content.Context;

import cn.haoma.base.socket.Msg;

/**
 * @author Hunter
 *         Messenger的使用要进行一下设置
 *         messenger = MessengerFactory.getInstance();
 *         messenger.registProcesser(new MsgHandler());
 *         messenger.onRegistStatusListener(handler);
 *         messenger.onRegistMsgListener(msgHandler);
 *         messenger.setAddress(new InetSocketAddress(ConfigConst.SERVER_ADDRESS, 1234));
 *         messenger.setCharset(Charset.forName("UTF-8"));
 *         messenger.setDelimiter("~!OOXX!~");
 *         messenger.initSocket();
 */
public interface Messenger {
    public void closeSocket();

    /**
     * @return 与服务器的连接状态（STATUS_CONNECTED, STATUS_CONNECTING, STATUS_DISCONNECTED）
     */
    public ConnectionStatus getStatus();

    /**
     * 初始化连接，检测手机网络打开后可以调用此方法。
     */
    public void initSocket(Context context);

    /**
     * 添加一个接受服务段Push消息的Handler
     *
     * @param listener
     */
    public void registMsgListener(MsgListener listener);

    /**
     * 注册一个SoketHandler
     *
     * @param handler
     */
    public void registProcesser(SocketHandler handler);

    /**
     * 添加一个监听连接状态的Handler
     *
     * @param listener
     */
    public void registStatusListener(ConnectionStatusListener listener);

    /**
     * 发送消息，不管服务器有没有收到消息
     *
     * @param msg
     */
    public void sendMessage(Msg msg);

    /**
     * @param msg         必需设置msg的msgId
     * @param msgCallBack 此Handler回调服务器返回的确认消息
     */
    public void sendMessage(Msg msg, MsgCallBack msgCallBack);

    public void setAddress(String host, int port);

    public void setAutoReconnect(boolean autoReconnect);

    public void unregistMsgListener(MsgListener listener);

    public void unregistStatusListener(ConnectionStatusListener listener);


}
